const express = require('express')
// 创建路由表(空的路由表)
const router = express.Router()
// 引入自己写的工具函数(生成token的函数)
const jwtManger = require('../utils/jwtManger')
// 引入数据库中的数据
const adminModel = require('../db/modules/adminModule')
// ✨验证登录接口 http://localhost:8080/verifyToken
router.post('/verifyToken',async (req,res)=>{
    // 从请求体中获取id数据
    let { id } = req.fields
    // 从请求头中获取token数据
    let token = req.get('token')
    // 验证是否存在token，若不存在则返回失败
    if(!token) return res.send({"code":0,"msg":"token失效，请重新登录"})
    // 若token存在，和数据库中的token进行校验，若不存在则返回失败
    // findOne的返回值： 如果成功 返回一条数据文档 如果失败 返回值为null
    let admin = await adminModel.findOne({_id:id,token})
    if(!admin) return res.send({"code":0,"msg":"token失效，请重新登录"})
    // 若token存在并且token和数据库中的一致，验证有效期
    // 当前的时间戳
    let currentTime = Date.now()
    // token中存储的 (创建token的时间戳 + 有效期)的时间戳
    let liveTime = jwtManger.decodeToken(token).expires
    // 如果过期，则失效，返回失败
    if(currentTime >= liveTime) return res.send({"code":0,"msg":"token失效，请重新登录"})
    // 若满足上述三点if条件，则验证通过
    res.send({"code":1,"msg":"token通过验证"})
})

// 注意：以后要求尽量少使用花括号，因为花括号会生成块级作用域，其一，代码过多可能会造成写错代码(位置问题)
//                                                        其二，变量容易获取不到
module.exports = router